home *** CD-ROM | disk | FTP | other *** search
- 1000 '
- 1010 ' COMPILER COMMANDS:
- 1020 ' $TITLE: '> FLIPS < John Intorcio'
- 1030 ' $SUBTITLE: 'VER 1.2 April 17, 1986'
- 1040 CLS
- 1050 PRINT " ╔═══════════════════════════════════════════════════╗"
- 1060 PRINT " ║ > F L I P S < Ver. 1.2 ║"
- 1070 PRINT " ║ ║"
- 1080 PRINT " ║ This program is distributed as user supported ║"
- 1090 PRINT " ║ software. You are free to copy and distribute ║"
- 1100 PRINT " ║ this program provided: ║"
- 1110 PRINT " ║ ║"
- 1120 PRINT " ║ 1. It is not distributed in modified form. ║"
- 1130 PRINT " ║ 2. No fee or consideration is charged. ║"
- 1140 PRINT " ║ 3. This message is not bypassed or removed. ║"
- 1150 PRINT " ║ ║"
- 1160 PRINT " ║ If you run this program and find it usefull ║"
- 1170 PRINT " ║ and if you would like to make a contribution ║"
- 1180 PRINT " ║ toward the development of future versions or ║"
- 1190 PRINT " ║ if you discover problems or fixes write to: ║"
- 1200 PRINT " ║ ║"
- 1210 PRINT " ║ John Intorcio ║"
- 1220 PRINT " ║ 247 State Street ║"
- 1230 PRINT " ║ Northampton, MA 01060 ║"
- 1240 PRINT " ║ ║"
- 1250 PRINT " ║ Or contact <The ToolBox> at (617) 364-2474 ║"
- 1260 PRINT " ╚═══════════════════════════════════════════════════╝"
- 1270 PAUSE.TIME = 4:GOSUB 4920
- 1280 '
- 1290 ' --------- GET NODE RECORD FROM COMMAND LINE ---------
- 1300 ' --------- TO ALLOW ASSIGNMENT TO PROPER PORT --------
- 1310 ' --- NOTE: THIS COMMAND WILL NOT WORK PROPERLY UNDER INTERPRETER --
- 1320 '
- 1330 NODE.NUMBER = VAL(COMMAND$):IF NODE.NUMBER = 0 THEN NODE.NUMBER = 1
- 1340 '
- 1350 ' --------- SET UP ---------
- 1360 '
- 1370 ON ERROR GOTO 6300
- 1380 DIM COMM.PORTS$(5),FACE$(2),SC(3),A(9,9),I4(7),J4(7),P$(2):Z0 = 0
- 1390 GOSUB 5810 'READ CONFIG FILE
- 1400 '
- 1410 ' --------- CHECK FOR NODE CONFIGURATION --------
- 1420 '
- 1430 IF COMM.PORTS$(NODE.NUMBER) = "NONE" THEN ERROR 200
- 1440 GOSUB 5060 'GET USER PARAMETERS AND INITIALIZE COMM PORT
- 1450 '
- 1460 ' --------- SET EXIT TRAPS ---------
- 1470 '
- 1480 ON TIMER(MAX.TIME*60) GOSUB 2060
- 1490 TIMER ON
- 1500 START.TIME$ = TIME$:START.SECONDS = VAL(MID$(START.TIME$,1,2))*3600+VAL(MID$(START.TIME$,4,2))*60+VAL(MID$(START.TIME$,7,2))
- 1510 KEY OFF:LOCATE 25,1
- 1520 PRINT "FLIPS From John Intorcio "+USER.NAME$;TAB(60);"Time in: "+TIME$
- 1530 LOCATE 24,1
- 1540 IF GRAPHICS.FLAG = 1 THEN GRAPHICS.FLAG = 0 ELSE GRAPHICS.FLAG = 1
- 1550 START.FLAG = 1:GOTO 4500 'INITIALIZE GRAPHICS
- 1560 '
- 1570 ' --------- GET SCORE --------
- 1580 '
- 1590 OPEN "FLIPS.PTS" FOR INPUT AS #4
- 1600 INPUT #4,GAMES.PLAYED,COMP.WINS,HUMAN.WINS,LAST.USER$
- 1610 CLOSE #4
- 1620 START.FLAG = 0
- 1630 '
- 1640 ' --------- CHECK FOR REPEAT USER ---------
- 1650 '
- 1660 IF LAST.USER$ <> USER.NAME$ OR ALLOW.REPEAT.USER$ = "YES" THEN 1730
- 1670 '
- 1680 ' --------- THIS IS REPEAT USER! GIVE A LITTLE NOTE AND RETURN ----
- 1690 '
- 1700 MSG$=CLEAR.SCR$+"SORRY, YOU'VE ALLREADY PLAYED FLIPS!!!!!":GOSUB 5270
- 1710 MSG$="LET'S GIVE SOMEONE ELSE A CHANCE!"+LINE.FEED$+LINE.FEED$:GOSUB 5270
- 1720 GOTO 5710
- 1730 '
- 1740 ' -------- DISPLAY WELCOME SCREEN --------
- 1750 '
- 1760 TEXT.FILE$ = WEL.PATH$ + WELCOME.SCR$:GOSUB 4720
- 1770 '
- 1780 ' --------- EXECUTE MAIN MENU ----------------
- 1790 '
- 1800 WHILE GAMES < MAX.GAMES
- 1810 MSG$ = CLEAR.SCR$:GOSUB 5270
- 1820 MSG$ = "GAMES PLAYED: "+STR$(GAMES.PLAYED)+" COMPUTER: "+STR$(COMP.WINS)+" HUMANS: "+STR$(HUMAN.WINS)
- 1830 MSG$ = MSG$+LINE.FEED$+LINE.FEED$:GOSUB 5270
- 1840 MSG$ = " ***** FLIP VER. 1.2 MAIN MENU ****** FLIPS NODE: "+STR$(NODE.NUMBER):GOSUB 5270
- 1850 MSG$ = LINE.FEED$ + LINE.FEED$:GOSUB 5270
- 1860 MSG$ = " REMEMBER: WHILE PLAYING THE GAME YOU MAY ENTER Q AT ANY TIME TO":GOSUB 5270
- 1870 MSG$ = " QUIT. ALSO, ENTER YOUR MOVE AS A0 IF YOU MUST FORFEIT!":GOSUB 5270
- 1880 MSG$ = LINE.FEED$ + LINE.FEED$:GOSUB 5270
- 1890 MSG$ = " 1. PLAY GAME":GOSUB 5270
- 1900 MSG$ = " 2. DISPLAY INSTRUCTIONS":GOSUB 5270
- 1910 MSG$ = " 3. TOGGLE GRAPHICS. NOW: "
- 1920 IF GRAPHICS.FLAG = 1 THEN MSG$ = MSG$ + "ASCII" ELSE MSG$ = MSG$ + "NONE"
- 1930 GOSUB 5270
- 1940 MSG$ = " 4. TOGGLE LINE FEEDS. NOW: "
- 1950 IF LF.FLAG = 1 THEN MSG$ = MSG$ + "ON" ELSE MSG$ = MSG$ + "OFF"
- 1960 GOSUB 5270
- 1970 MSG$ = " 5. RETURN TO " + BOARD.NAME$:GOSUB 5270
- 1980 MSG$ = LINE.FEED$ + LINE.FEED$:GOSUB 5270
- 1990 MSG$ = "YOUR SELECTION ?":GOSUB 5410
- 2000 OPT = INT(VAL(RSP$)):IF OPT < 1 OR OPT > 5 THEN 1770
- 2010 ON OPT GOTO 4330,4450,4500,4670,5720
- 2020 GOTO 1770
- 2030 WEND
- 2040 MSG$ = CLEAR.SCR$ + "MAXIMUM GAMES REACHED.":GOSUB 5270
- 2050 GOTO 5720
- 2060 MSG$ = CLEAR.SCR$ + "MAXIMUM TIME REACHED.":GOSUB 5270
- 2070 GOTO 5720
- 2080 '
- 2090 ' --------- SUBROUTINE TO INITIALIZE GAME BOARD AND VARIABLES ---------
- 2100 '
- 2110 XL = 3:XH = 6:YL = 3:YH = 6
- 2120 NP = 1:S2 = 2:S4 = 1:S5 = - 2
- 2130 B = -1:W = 1:PT = 0
- 2140 FOR K = 0 TO 7
- 2150 IF GAMES < 1 THEN READ I4(K),J4(K)
- 2160 NEXT
- 2170 FOR I = 0 TO 9:FOR J = 0 TO 9
- 2180 A(I,J) = 0
- 2190 NEXT J,I
- 2200 A(4,4)= W:A(5,5)= W
- 2210 A(4,5)= B:A(5,4)= B
- 2220 SC(1)= 2:SC(2)= 2:N1= 4:Z= 0
- 2230 C= B:H= W
- 2240 MSG$=CLEAR.SCR$+"DO YOU WANT TO GO FIRST (Y OR N) ? ":GOSUB 5410
- 2250 TEMP$=RSP$:GOSUB 4240:RSP$=TEMP$
- 2260 PT= 1:IF RSP$= "Y" THEN PT= 0
- 2270 RETURN
- 2280 '
- 2290 ' --------- SUBROUTINE TO GET COMPUTERS MOVE ---------
- 2300 '
- 2310 GOTO 2350
- 2320 IF PT= 2 THEN B1= - 1:I3= 0:J3= 0:T1= C:T2= H
- 2330 IF PT= 1 THEN B1= - 1:I3= 0:J3= 0:T1= H:T2= C
- 2340 GOTO 2790
- 2350 PT= PT+ 1:IF PT> 2 THEN PT= 1
- 2360 B1= - 1:I3= 0:J3= 0:T1= C:T2= H
- 2370 FOR I= YL TO YH:FOR J= XL TO XH
- 2380 IF A(I,J)< > 0 THEN 2540
- 2390 GOSUB 3460
- 2400 IF F1 = Z0 THEN 2540
- 2410 U = - 1
- 2420 GOSUB 3520
- 2430 IF S1 = Z0 THEN 2540
- 2440 IF (I = 1)OR (I = 8)THEN S1 = S1+ S2
- 2450 IF (J = 1)OR (J = 8)THEN S1 = S1+ S2
- 2460 IF (I = 2)OR (I = 7)THEN S1 = S1+ S5
- 2470 IF (J = 2)OR (J = 7)THEN S1 = S1+ S5
- 2480 IF (I = 3)OR (I = 6)THEN S1 = S1+ S4
- 2490 IF (J = 3)OR (J = 6)THEN S1 = S1+ S4
- 2500 IF S1< B1 THEN 2540
- 2510 IF S1> B1 THEN 2530
- 2520 IF RND (1)> .5 THEN 2540
- 2530 B1 = S1:I3 = I:J3 = J
- 2540 NEXT J,I
- 2550 IF B1 > 0 THEN 2630
- 2560 IF S5 = 0 THEN 2590
- 2570 IF NP = 1 THEN S5 = 0:GOTO 2360
- 2580 S5 = 0:GOTO 2290
- 2590 S5 = 0:MSG$ = "I HAVE TO FORFEIT MY MOVE.":GOSUB 5270
- 2600 IF Z = 1 THEN 3160
- 2610 Z = 1
- 2620 GOTO 2740
- 2630 Z = 0
- 2640 MSG$ = "I WILL MOVE TO "+RIGHT$ (STR$ (I3),1)+" "+CHR$(J3+ 64):GOSUB 5270
- 2650 I = I3:J = J3:U = 1
- 2660 GOSUB 3700
- 2670 GOSUB 3520
- 2680 SC(PT) = SC(PT) + S1 + 1
- 2690 OP = PT + 1:IF OP = 3 THEN OP = 1
- 2700 SC(OP) = SC(OP) - S1
- 2710 N1 = N1 + 1
- 2720 MSG$ = "THAT GIVES ME " + STR$(S1) + " OF YOUR PIECES.":GOSUB 5270
- 2730 IF (SC(OP) = 0) OR (N1 = 64) THEN 3160
- 2740 T1 = H:T2 = C
- 2750 RETURN
- 2760 '
- 2770 ' --------- SUBROUTINE FOR PLAYER'S MOVE ---------
- 2780 '
- 2790 PT = PT + 1:IF PT > 2 THEN PT = 1
- 2800 IF PT = 2 THEN B1 = - 1:I3 = 0:J3 = 0:T1 = C:T2 = H
- 2810 IF PT = 1 THEN B1 = - 1:I3 = 0:J3 = 0:T1 = H:T2 = C
- 2820 MSG$=FACE$(2) +", YOUR MOVE ? ":GOSUB 5350:GOSUB 3780
- 2830 IF (I < 0) OR (J < 0) OR (J > 8) OR (I > 8) THEN 2800
- 2840 IF I <> 0 THEN 2910
- 2850 MSG$ = "ARE YOU FORFEITING YOUR TURN (Y OR N) ? ":GOSUB 5410
- 2860 TEMP$ = RSP$:GOSUB 4240:RSP$ = TEMP$
- 2870 IF RSP$ <> "Y" THEN GOTO 2800
- 2880 IF Z = 1 THEN 3160
- 2890 Z1 = 1
- 2900 GOTO 3140
- 2910 IF A(I,J) = 0 THEN 2940
- 2920 MSG$ = "SORRY,SQUARE OCCUPIED; TRY AGAIN":GOSUB 5270
- 2930 GOTO 2800
- 2940 GOSUB 3460
- 2950 IF F1 = 1 THEN 2980
- 2960 MSG$ = "SORRY,NOT NEXT TO MY PIECES; TRY AGAIN":GOSUB 5270
- 2970 GOTO 2800
- 2980 U = -1
- 2990 GOSUB 3520
- 3000 IF S1 > 0 THEN 3030
- 3010 MSG$ = "SORRY,DOESN'T FLANK A ROW; TRY AGAIN":GOSUB 5270
- 3020 GOTO 2800
- 3030 Z = 0
- 3040 MSG$ = " THAT GIVES YOU "+STR$(S1)+" PIECE":
- 3050 GOSUB 3700
- 3060 IF S1 > 1 THEN MSG$ = MSG$ + "S"
- 3070 GOSUB 5270:U = 1
- 3080 GOSUB 3540
- 3090 SC(PT) = SC(PT) + S1 + 1
- 3100 OP = PT + 1:IF OP = 3 THEN OP = 1
- 3110 SC(OP) = SC(OP) - S1
- 3120 N1 = N1 + 1
- 3130 IF SC(OP) = 0 OR N1 = 64 THEN 3160
- 3140 RETURN
- 3150 '
- 3160 ' --------- SUBROUTINE FOR CLOSE OF GAME ---------
- 3170 '
- 3180 MSG$ = "YOU HAVE "+STR$(SC(1))+" PIECES ":GOSUB 5270
- 3190 MSG$ = "I HAVE "+STR$(SC(2))+" PIECES": GOSUB 5270
- 3200 IF SC(1) = SC(2) THEN 3240
- 3210 IF SC(1) > SC(2) THEN 3260
- 3220 MSG$="SORRY, I WON THAT ONE. ":GOSUB 5350
- 3230 GAMES.PLAYED = GAMES.PLAYED + 1:COMP.WINS = COMP.WINS + 1:GOTO 3280
- 3240 MSG$="ITS A TIE !!":GOSUB 5350
- 3250 GAMES.PLAYED = GAMES.PLAYED + 1:GOTO 3430
- 3260 MSG$ = "YOU WON!!!!!! ":GOSUB 5350
- 3270 GAMES.PLAYED = GAMES.PLAYED + 1:HUMAN.WINS = HUMAN.WINS + 1
- 3280 C1 = SC(1) - SC(2)
- 3290 IF C1 > 0 THEN 3310
- 3300 C1 = -C1
- 3310 C1 = (64 * C1) / N1
- 3320 MSG$ = "THAT WAS A ":GOSUB 5350
- 3330 IF C1 < 11 THEN 3410
- 3340 IF C1 < 25 THEN 3400
- 3350 IF C1 < 39 THEN 3390
- 3360 IF C1 < 53 THEN 3380
- 3370 MSG$ = "PERFECT GAME!":GOTO 3420
- 3380 MSG$ = "WALKAWAY!":GOTO 3420
- 3390 MSG$ = "FIGHT!":GOTO 3420
- 3400 MSG$ = "HOT GAME!":GOTO 3420
- 3410 MSG$ = "SQUEAKER!"
- 3420 GOSUB 5270
- 3430 PAUSE.TIME = 3:GOSUB 4920
- 3440 GAMES = GAMES + 1:GOTO 1770
- 3450 '
- 3460 ' --------- CHECK FOR FLANK ---------
- 3470 '
- 3480 F1 = Z0:FOR I1 = -1 TO 1:FOR J1 = -1 TO 1:IF A(I + I1,J1 + J) = T2 THEN 3500
- 3490 NEXT J1,I1:RETURN
- 3500 F1 = 1:RETURN
- 3510 '
- 3520 ' --------- SUBROUTINE TO CHECK FOR COUNT AND TO FLIP ---------
- 3530 '
- 3540 S1 = Z0:FOR K = 0 TO 7
- 3550 S3 = Z0:I5 = I4(K):J5 = J4(K):I6 = I + I5:J6 = J + J5
- 3560 IF A(I6,J6) <> T2 THEN 3670
- 3570 S3 = S3 + 1:I6 = I6 + I5:J6 = J6 + J5
- 3580 IF A(I6,J6) = T1 THEN 3610
- 3590 IF A(I6,J6) = Z0 THEN 3670
- 3600 GOTO 3570
- 3610 S1 = S1 + S3
- 3620 IF U <> 1 THEN 3670
- 3630 I6 = I:J6 = J
- 3640 FOR K1 = 0 TO S3
- 3650 A(I6,J6) = T1:I6 = I6 + I5:J6 = J6 + J5
- 3660 NEXT K1
- 3670 NEXT K
- 3680 RETURN
- 3690 '
- 3700 ' --------- SET SEARCH LIMITS FOR COMPUTER MOVE ---------
- 3710 '
- 3720 IF I = YL THEN YL = YL - 1:IF YL < 1 THEN YL = 1
- 3730 IF I = YH THEN YH = YH + 1:IF YH > 8 THEN YH = 8
- 3740 IF J = XL THEN XL = XL - 1:IF XL < 1 THEN XL = 1
- 3750 IF J = XH THEN XH = XH + 1:IF XH > 8 THEN XH = 8
- 3760 RETURN
- 3770 '
- 3780 ' -------- INPUT SUBROUTINE --------
- 3790 '
- 3800 I = -1:J = - 1
- 3810 CR.SUPPRESS = 1
- 3820 MSG$ = "":GOSUB 5410:TEMP$ = "":IF LEN(RSP$) = 0 THEN 3820
- 3830 IF LEN(RSP$) < 2 AND NOT (ASC(RSP$) = 81 OR ASC(RSP$) = 113) THEN MSG$ = ", ":TEMP$ = RSP$:GOSUB 5410
- 3840 TEMP$ = TEMP$ + RSP$:GOSUB 4240:RSP$ = TEMP$
- 3850 FOR K = 1 TO 2
- 3860 G = ASC(MID$(RSP$,K,1))
- 3870 IF G = 81 THEN 3220 'QUIT
- 3880 IF 47 < G AND G < 58 THEN I = G - 48
- 3890 IF 64 < G AND G < 74 THEN J = G - 64
- 3900 NEXT
- 3910 ECHO.OFF = 0:CR.SUPPRESS = 0
- 3920 MSG$ = "":GOSUB 5270:RETURN
- 3930 '
- 3940 ' --------- BOARD DATA ---------
- 3950 '
- 3960 DATA 0,1,-1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1
- 3970 '
- 3980 ' ----------- DRAW GAME BOARD ------------
- 3990 '
- 4000 MSG$ = CLEAR.SCR$+" *** F L I P S ***":GOSUB 5270
- 4010 MSG$ = "":GOSUB 5270
- 4020 MSG$ = " 1 2 3 4 5 6 7 8":GOSUB 5270
- 4030 MSG$ = " " + GRAPH1$:GOSUB 5270
- 4040 FOR I = 1 TO 8
- 4050 MSG$ = CHR$(I + 64) + " "
- 4060 FOR J = 1 TO 8
- 4070 MSG$ = MSG$ + " " + GRAPH4$
- 4080 FACE=(A(J,I)+3)/2:IF FACE=1.5 THEN MSG$=MSG$+" " ELSE MSG$=MSG$+" "+FACE$(FACE)
- 4090 NEXT J
- 4100 MSG$=MSG$+" "+GRAPH4$
- 4110 IF I=3 THEN MSG$=MSG$+" "+FACE$(2)+" "+STR$(SC(1))
- 4120 IF I=5 THEN MSG$=MSG$+" "+FACE$(1)+" "+STR$(SC(2))
- 4130 IF I<>7 THEN 4170
- 4140 XTIME$=TIME$:SECONDS=VAL(MID$(XTIME$,1,2))*3600+VAL(MID$(XTIME$,4,2))*60+VAL(MID$(XTIME$,7,2))
- 4150 TIME.REM%=INT(MAX.TIME-(SECONDS-START.SECONDS)/60)
- 4160 MSG$=MSG$+STR$(TIME.REM%)+" MIN. REMAIN"
- 4170 GOSUB 5270
- 4180 IF I=8 THEN 4200
- 4190 MSG$=" "+GRAPH2$:GOSUB 5270
- 4200 NEXT I
- 4210 MSG$=" "+GRAPH3$:GOSUB 5270
- 4220 RETURN
- 4230 '
- 4240 ' --------- SUBROUTINE TO CONVERT TO UPPER CASE
- 4250 ' --------- ENTRY IS PASSED AS TEMP$
- 4260 '
- 4270 NCHR=LEN(TEMP$)
- 4280 FOR TEMP=1 TO NCHR
- 4290 TEST=ASC(MID$(TEMP$,TEMP,1)):IF TEST>93 THEN TEST=TEST-32
- 4300 MID$(TEMP$,TEMP,1)=CHR$(TEST):NEXT TEMP
- 4310 RETURN
- 4320 '
- 4330 ' --------- SUBROUTINE TO START ---------
- 4340 '
- 4350 MSG$=CLEAR.SCR$:GOSUB 5270
- 4360 GOSUB 2090 'INITIALIZE BOARD
- 4370 GOSUB 3980 'DISPLAY BOARD
- 4380 IF PT=0 THEN 4420 'PLAYER GOES FIRST
- 4390 GOSUB 2290 'COMPUTER'S MOVE
- 4400 PAUSE.TIME=COMP.MOVE.PAUSE:GOSUB 4920 'LET PLAYER SEE MOVE
- 4410 GOSUB 3980 'DISPLAY UPDATED BOARD
- 4420 GOSUB 2770 'PLAYER'S MOVE
- 4430 GOTO 4390 'NEXT MOVE
- 4440 '
- 4450 ' --------- SUBROUTINE FOR INSTRUCTIONS ----------------
- 4460 '
- 4470 TEXT.FILE$=HLP.PATH$+HELP.FILE$:GOSUB 4720
- 4480 GOTO 1770
- 4490 '
- 4500 ' --------- TOGGLE GRAPHICS ---------
- 4510 '
- 4520 IF GRAPHICS.FLAG=1 THEN GRAPHICS.FLAG=0 ELSE GRAPHICS.FLAG=1
- 4530 IF GRAPHICS.FLAG=1 THEN 4600
- 4540 GRAPH1$="I---I---I---I---I---I---I---I---I"
- 4550 GRAPH2$="I---I---I---I---I---I---I---I---I"
- 4560 GRAPH3$="I---I---I---I---I---I---I---I---I"
- 4570 GRAPH4$="I"
- 4580 FACE$(1)="X":FACE$(2)="0"
- 4590 GOTO 4650
- 4600 GRAPH1$="╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗"
- 4610 GRAPH2$="╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣"
- 4620 GRAPH3$="╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝"
- 4630 GRAPH4$="║"
- 4640 FACE$(1)=CHR$(1):FACE$(2)=CHR$(2)
- 4650 IF START.FLAG=1 THEN 1560 ELSE 1770
- 4660 '
- 4670 ' --------- TOGGLE LINE FEEDS ---------
- 4680 '
- 4690 IF LF.FLAG=1 THEN LF.FLAG=0 ELSE LF.FLAG=1
- 4700 GOTO 1770
- 4710 '
- 4720 ' --------- SUBROUTINE TO DISPLAY A TEXT FILE ---------
- 4730 '
- 4740 ' --------- FILE NAME PASSED AS TEXT.FILE$ ---------
- 4750 '
- 4760 OPEN TEXT.FILE$ FOR INPUT AS #1
- 4770 LINES.DONE=0
- 4780 WHILE NOT EOF(1)
- 4790 LINE INPUT #1,MSG$
- 4800 GOSUB 5270
- 4810 LINES.DONE=LINES.DONE+1
- 4820 IF LINES.DONE < 24 THEN 4780
- 4830 MSG$="MORE (Y) OR N ?":GOSUB 5410
- 4840 TEMP$=RSP$:GOSUB 4240:RSP$=TEMP$
- 4850 IF RSP$<>"N" THEN LINES.DONE=0:GOTO 4780
- 4860 GOTO 4890
- 4870 WEND
- 4880 MSG$="MORE (Y) OR N ?":GOSUB 5410
- 4890 CLOSE #1
- 4900 RETURN
- 4910 '
- 4920 ' --------- PAUSE LOOP ----------------
- 4930 ' --------- LENGTH OF PAUSE IN SECONDS IS PASSSED AS PAUSE.TIME
- 4940 ' --------- USES TIME SINCE MIDNIGHT SO WILL GET SCREWED UP
- 4950 ' --------- IF RUNNING WHEN ROLLOVER OCCURS??????
- 4960 '
- 4970 TIME.PASSED=0:BEGIN.TIME$=TIME$
- 4980 BEGIN.SECONDS=VAL(MID$(BEGIN.TIME$,1,2))*3600+VAL(MID$(BEGIN.TIME$,4,2))*60+VAL(MID$(BEGIN.TIME$,7,2))
- 4990 WHILE TIME.PASSED<PAUSE.TIME
- 5000 NOW.TIME$=TIME$
- 5010 NOW.SECONDS=VAL(MID$(NOW.TIME$,1,2))*3600+VAL(MID$(NOW.TIME$,4,2))*60+VAL(MID$(NOW.TIME$,7,2))
- 5020 TIME.PASSED=NOW.SECONDS-BEGIN.SECONDS
- 5030 WEND
- 5040 RETURN
- 5050 '
- 5060 ' --------- SUBROUTINE TO GET USER'S PARAMETERS AND OPEN COMM PORT ---------
- 5070 ' --------- USES PATH AND FILE NAME FROM CONFIG FILE TO FIND
- 5080 ' --------- MESSAGE FILE AND USES HEADER TO GET PARAMETERS
- 5090 '
- 5100 LINE.FEED$=CHR$(10):CARRIAGE.RETURN$=CHR$(13)
- 5110 FOR TEMP=1 TO 25:CLEAR.SCR$=CLEAR.SCR$+LINE.FEED$:NEXT TEMP
- 5120 OPEN "R",1,MSG.PATH$+MSG.FILE$:FIELD 1,128 AS USER.RECORD$
- 5130 GET 1,NODE.NUMBER+1:BAUD=VAL(MID$(USER.RECORD$,44,2)):PARAM=VAL(MID$(USER.RECORD$,42,2))
- 5140 USER.NAME$=LEFT$(USER.RECORD$,30)
- 5150 FOR TEMP=LEN(USER.NAME$) TO 1 STEP -1 'TRIM SPACES FROM NAME
- 5160 IF MID$(USER.NAME$,TEMP,1)<>" " THEN 5180
- 5170 NEXT TEMP
- 5180 USER.NAME$=LEFT$(USER.NAME$,TEMP)
- 5190 ' --------- GET COMM PORT PARAMETERS ---------
- 5200 IF PARAM=-1 THEN PARAM$="N,8,1,CS,DS,CD" ELSE PARAM$="E,7,1,CS,DS,CD"
- 5210 IF BAUD=-4 THEN BAUD$="2400" ELSE IF BAUD=-3 THEN BAUD$="1200," ELSE BAUD$="300,"
- 5220 CLOSE #1 'DONE WITH MESSAGE FILE
- 5230 MCR=&H3FC:MSR=&H3FE
- 5240 OPEN COMM.PORTS$(NODE.NUMBER)+BAUD$+PARAM$ AS #3
- 5250 RETURN
- 5260 '
- 5270 ' --------- SEND STRING WITH CARRIAGE RETURN ---------
- 5280 ' --------- STRING PASSED AS MSG$
- 5290 ' --------- IF LF.FLAG SET TO 1, LINE FEED PASSED AS WELL
- 5300 '
- 5310 PRINT MSG$:PRINT #3,MSG$
- 5320 IF LF.FLAG=1 THEN PRINT #3,LINE.FEED$
- 5330 RETURN
- 5340 '
- 5350 ' --------- SEND STRING WITH NO CARRIAGE RETURN ---------
- 5360 ' --------- STRING PASSED AS MSG$
- 5370 '
- 5380 PRINT MSG$;:PRINT #3,MSG$;
- 5390 RETURN
- 5400 '
- 5410 ' --------- GET RESPONSE FROM REMOTE USER ---------
- 5420 ' --------- MSG$ SENT AS PROMPT
- 5430 ' --------- RESPONSE RETURNED AS RSP$
- 5440 ' --------- IF CR.SUPPRESS = 1, NO CR ECHOED AFTER INPUT
- 5450 ' --------- IF ECHO.SUPPRESS = 1, NO ECHO AT ALL
- 5460 '
- 5470 GOSUB 5350
- 5480 RSP$=""
- 5490 WHILE EOF(3):CHAR$=INKEY$
- 5500 IF CHAR$<>"" THEN 5520 ELSE WEND:CHAR$="":GOSUB 5680
- 5510 CHAR$="":CHAR$=INPUT$(1,3):IF CHAR$=CHR$(127) THEN 5620
- 5520 IF CHAR$=CHR$(8) OR CHAR$=CHR$(7) OR CHAR$=CHR$(26) OR CHAR$=CHR$(27) THEN 5620
- 5530 IF CHAR$<" " AND CHAR$<>CARRIAGE.RETURN$ THEN 5490
- 5540 IF CHAR$=CARRIAGE.RETURN$ AND CR.SUPPRESS = 1 THEN 5610 'NO CR ECHO
- 5550 IF ECHO.OFF=1 THEN 5570 'SUPPRESS ECHO
- 5560 PRINT CHAR$;:PRINT #3,CHAR$; 'OK CHARACTER. ECHO.
- 5570 IF CHAR$=CARRIAGE.RETURN$ THEN 5600 '<CR> ENDS INPUT
- 5580 IF LEN(RSP$)=>254 THEN MSG$="INPUT TOO LONG...TRY AGAIN":GOSUB 5270:GOTO 5410
- 5590 RSP$=RSP$+CHAR$:GOTO 5490 'ADD TO RESPONSE AND GET NEXT CHARACTER
- 5600 IF LF.FLAG=1 THEN PRINT #3,LINE.FEED$ 'SEND <LF> IF NECESSARY
- 5610 RETURN
- 5620 ' --------- SUBROUTINE TO DEAL WITH <DEL> IN INPUT STRING ---------
- 5630 IF LEN(RSP$)=0 THEN 5490 'IF FIRST CHARACTER THEN DOESN'T MATTER
- 5640 RSP$=LEFT$(RSP$,LEN(RSP$)-1)
- 5650 PRINT CHR$(29)+CHR$(32)+CHR$(29); 'DELETE ON SYSOP'S SCREEN
- 5660 PRINT #3,CHR$(8)+CHR$(32)+CHR$(8); 'DELETE ON REMOTE SCREEN
- 5670 GOTO 5490 'ALL SET. GET NEXT CHARACTER
- 5680 ' --------- CHECK FOR CARRIER ---------
- 5690 IF INP(MSR)<128 THEN PRINT "USER DROPPED CARRIER!!!":GOTO 5720
- 5700 RETURN
- 5710 '
- 5720 ' --------- CLOSING SUBROUTINE ----------------
- 5730 ' --------- CLOSES PORT UPDATES SCORE AND EXITS
- 5740 '
- 5750 OPEN "FLIPS.PTS" FOR OUTPUT AS #4
- 5760 PRINT #4,GAMES.PLAYED,COMP.WINS,HUMAN.WINS,USER.NAME$
- 5770 CLOSE #4
- 5780 MSG$="STAND BY. RETURNING TO "+BOARD.NAME$+". . .":GOSUB 5350
- 5790 CLOSE 3:OUT MCR,INP(MCR) OR 1:SYSTEM
- 5800 '
- 5810 ' --------- SUBROUTINE TO READ CONFIGURATION FILE
- 5820 '
- 5830 ' CONFIG FILE ASSUMED TO BE TEXT FILE WITH ONE ENTRY PER LINE
- 5840 ' VARIABLES ASSUMED LISTED IN THE FOLLOWING ORDER:
- 5850 '
- 5860 ' BOARD.NAME$ NAME OF BULLETIN BOARD TO BE LISTED
- 5870 ' WELCOME.SCR$ PATH AND FILE NAME FOR WELCOME SCREEN
- 5880 ' WEL.PATH$ PATH TO FIND WELCOME SCREEN FILE
- 5890 ' MSG.FILE$ FILENAME FOR MESSAGE FILE
- 5900 ' MSG.PATH$ PATH TO FIND MESSAGE FILE
- 5910 ' HELP.FILE$ FILE TO DISPLAY FOR INSTRUCTIONS
- 5920 ' HLP.PATH$ PATH TO FIND INSTRUCTION FILE
- 5930 ' LF.FLAG DEFAULT LINE FEED SETTING: 1 IF YES, 0 IF NO
- 5940 ' GRAPHICS.FLAG DEFAULT GRAPHICS SETTING: 1 IF ASCII, 0 IF NONE
- 5950 ' MAX.GAMES MAXIMUM GAMES A PLAYER IS ALLOWED
- 5960 ' MAX.TIME MAXIMUM TIME IN MINUTES A PLAYER MAY SPEND
- 5970 ' COMM.PORTS$(1) \
- 5980 ' COMM.PORTS$(2) \
- 5990 ' COMM.PORTS$(3) > COMM PORTS FOR NODES
- 6000 ' COMM.PORTS$(4) / 1 THROUGH 5
- 6010 ' COMM.PORTS$(5) /
- 6020 ' COMP.MOVE.PAUSE PAUSE TIME AFTER COMPUTER'S MOVE
- 6025 ' ALLOW.REPEAT.USER$ FLAG TO LOCK OUT RETURN USERS
- 6030 '
- 6040 OPEN "FLIPS.CNF" FOR INPUT AS #2
- 6050 LINE INPUT #2, BOARD.NAME$
- 6060 LINE INPUT #2, WELCOME.SCR$
- 6070 LINE INPUT #2, WEL.PATH$
- 6080 LINE INPUT #2, MSG.FILE$
- 6090 LINE INPUT #2, MSG.PATH$
- 6100 LINE INPUT #2, HELP.FILE$
- 6110 LINE INPUT #2, HLP.PATH$
- 6120 INPUT #2, LF.FLAG
- 6130 INPUT #2, GRAPHICS.FLAG
- 6140 INPUT #2, MAX.GAMES
- 6150 INPUT #2, MAX.TIME
- 6160 LINE INPUT#2, COMM.PORTS$(1)
- 6170 LINE INPUT#2, COMM.PORTS$(2)
- 6180 LINE INPUT#2, COMM.PORTS$(3)
- 6190 LINE INPUT#2, COMM.PORTS$(4)
- 6200 LINE INPUT#2, COMM.PORTS$(5)
- 6210 INPUT #2, COMP.MOVE.PAUSE
- 6212 INPUT #2, ALLOW.REPEAT.USER$
- 6220 CLOSE #2
- 6230 ' ---------- CHECK THAT PATHS AND FILENAMES HAVE PROPER FORMAT -----------
- 6240 IF ((RIGHT$(WEL.PATH$,1)<>"\" AND RIGHT$(WEL.PATH$,1)<>":") AND LEFT$(WELCOME.SCR$,1)<>"\") THEN WEL.PATH$=WEL.PATH$+"\"
- 6250 IF ((RIGHT$(MSG.PATH$,1)<>"\" AND RIGHT$(MSG.PATH$,1)<>":") AND LEFT$(MSG.FILE$,1)<>"\") THEN MSG.PATH$=MSG.PATH$+"\"
- 6260 IF ((RIGHT$(HLP.PATH$,1)<>"\" AND RIGHT$(HLP.PATH$,1)<>":") AND LEFT$(HELP.FILE$,1)<>"\") THEN HLP.PATH$=HLP.PATH$+"\"
- 6270 RETURN
- 6280 '
- 6290 '
- 6300 ' ---------------- MAIN ERROR TRAP ---------
- 6310 ' ---------------- ALL ERRORS PASS THROUGH HERE
- 6320 '
- 6330 IF ERR=200 THEN 6880
- 6340 IF ERL=6040 AND (ERR=53 OR ERR=76) THEN 6540 'CFG FILE NOT FOUND
- 6350 IF ERL=6040 THEN 6560 'ERROR OPENING CFG FILE
- 6360 IF ERL>=6050 AND ERL<=6220 THEN 6580 'ERROR READING CFG FILE
- 6370 IF ERL=5120 AND (ERR=53 OR ERR=76) THEN 6600 ' MSG FILE NOT FOUND
- 6380 IF ERL=5120 THEN 6620 'ERROR OPENING MSG FILE
- 6390 IF ERL=5130 THEN 6640 'ERROR READING MSG FILE
- 6400 IF ERL=5240 THEN 6660 'ERROR ADRESSING COMM PORT
- 6410 IF ERL=4760 AND (ERR=53 OR ERR=76) AND (TEXT.FILE$=WEL.PATH$+WELCOME.SCR$) THEN 6680 'WELC FILE NOT FND
- 6420 IF ERL=4760 AND (TEXT.FILE$=WEL.PATH$+WELCOME.SCR$) THEN 6700 'ERROR OPNG WEL FILE
- 6430 IF ERL=4790 AND (TEXT.FILE$=WEL.PATH$+WELCOME.SCR$) THEN 6720 'ERROR RDG WEL FILE
- 6440 IF ERL=4760 AND (ERR=53 OR ERR=76) AND (TEXT.FILE$=HLP.PATH$+HELP.FILE$) THEN 6740 'HLP FILE NOT FND
- 6450 IF ERL=4760 AND (TEXT.FILE$=HLP.PATH$+HELP.FILE$) THEN 6760 'ERROR OPNG HLP FILE
- 6460 IF ERL=4790 AND (TEXT.FILE$=HLP.PATH$+HELP.FILE$) THEN 6780 'ERROR RDG HLP FILE
- 6470 IF ERL=1590 THEN 6800
- 6480 IF ERL=1600 THEN 6820
- 6490 IF ERL=5750 THEN 6840
- 6500 IF ERL=5760 THEN 6860
- 6510 ' --------- UNACOUNTED FOR ERROR ----------------
- 6520 MSG$="Error #"+STR$(ERR)+" at line "+STR$(ERL)+ "of FLIPS. Please tell Sysop."
- 6530 GOSUB 5270:RESUME 5720
- 6540 MSG$="FLIPS Configuration file missing. Please tell Sysop."
- 6550 PRINT MSG$:RESUME 5790
- 6560 MSG$="Error opening FLIPS configuration file. Please tell Sysop."
- 6570 PRINT MSG$:RESUME 5790
- 6580 MSG$="Error reading FLIPS configuration file. Please tell Sysop."
- 6590 PRINT MSG$:RESUME 5790
- 6600 MSG$="FLIPS couldn't find MESSAGE file. Please tell Sysop."
- 6610 GOSUB 5270:RESUME 5720
- 6620 MSG$="Error opening MESSAGE file. Please tell Sysop."
- 6630 GOSUB 5270:RESUME 5720
- 6640 MSG$="Error reading MESSAGE file. Please tell Sysop."
- 6650 GOSUB 5270:RESUME 5720
- 6660 MSG$="FLIPS error addressing communications port: "+COMM.PORTS$(NODE.NUMBER)
- 6670 PRINT MSG$:RESUME 5790
- 6680 MSG$="FLIPS welcome screen missing. Please tell Sysop."
- 6690 GOSUB 5270:RESUME 4900
- 6700 MSG$="Error opening welcome screen. Please tell Sysop."
- 6710 GOSUB 5270:RESUME 4900
- 6720 MSG$="Error reading welcome screen. Please tell Sysop."
- 6730 GOSUB 5270:RESUME 4890
- 6740 MSG$="FLIPS help screen missing. Please tell Sysop."
- 6750 GOSUB 5270:RESUME 4900
- 6760 MSG$="Error opening help screen. Please tell Sysop."
- 6770 GOSUB 5270:RESUME 4900
- 6780 MSG$="Error reading help screen. Please tell Sysop."
- 6790 GOSUB 5270:RESUME 4890
- 6800 MSG$="Error opening score file. Please tell Sysop."
- 6810 GOSUB 5270:RESUME 1770
- 6820 MSG$="Error reading score file. Please tell Sysop."
- 6830 GOSUB 5270:RESUME 1610
- 6840 MSG$="Error opening score file. Please tell Sysop."
- 6850 GOSUB 5270:RESUME 5780
- 6860 MSG$="Error writing to score file. Please tell Sysop."
- 6870 GOSUB 5270:RESUME 5770
- 6880 MSG$="Flips is not configured for this node. Aborting."
- 6890 PRINT MSG$:RESUME 5790
- 6900 END
-